package com.ruoyi.payOrder.order.domain;

import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;


/**
 * 订单对象 order
 * 
 * @author zx
 * @date 2025-09-14
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(indexName="order")
public class Order extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 订单号 */
    @Id
    private Long id;

    /** 核销码【UUID产生、唯一】 */
    @Excel(name = "核销码【UUID产生、唯一】")
    @Field(type = FieldType.Text,index = false)
    private String verificationCode;

    /** 核销码图片 */
    @Excel(name = "核销码图片")
    @Field(type = FieldType.Text,index = false)
    private String verificationImg;

    /** 店铺id */
    @Excel(name = "店铺id")
    @Field(type = FieldType.Long)
    private Long mid;

    /** 用户id */
    @Excel(name = "用户id")
    @Field(type = FieldType.Long)
    private Long uid;

    /** 服务详情编号id */
    @Excel(name = "服务详情编号id")
    @Field(type = FieldType.Long)
    private Long serviceId;

    /** 服务类别id */
    @Excel(name = "服务类别id")
    @Field(type = FieldType.Long)
    private Long serviceTypeId;

    /** 下单时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "下单时间", width = 30, dateFormat = "yyyy-MM-dd")
    @Field(type = FieldType.Date)
    private Date orderTime;

    /** 预约时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "预约时间", width = 30, dateFormat = "yyyy-MM-dd")
    @Field(type = FieldType.Date)
    private Date reservationTime;

    /** 订单车辆id号 */
    @Excel(name = "订单车辆id号")
    @Field(type = FieldType.Long)
    private Long carId;

    /** 平台优惠券id【每次只使用一张】 */
    @Excel(name = "平台优惠券id【每次只使用一张】")
    @Field(type = FieldType.Long)
    private Long platformCouponId;

    /** 商家优惠券id【每次只使用一张】 */
    @Excel(name = "商家优惠券id【每次只使用一张】")
    @Field(type = FieldType.Long)
    private Long shopCouponId;

    /** 实付金额 */
    @Excel(name = "实付金额")
    @Field(type = FieldType.Double)
    private Double price;

    /** 支付时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "支付时间", width = 30, dateFormat = "yyyy-MM-dd")
    @Field(type = FieldType.Date)
    private Date payTime;

    /** 支付方式（0微信、1支付宝、2银行卡） */
    @Excel(name = "支付方式", readConverterExp = "0=微信、1支付宝、2银行卡")
    @Field(type = FieldType.Long)
    private Long payType;

    /** 使用时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "使用时间", width = 30, dateFormat = "yyyy-MM-dd")
    @Field(type = FieldType.Date)
    private Date useTime;

    /** 订单状态（0待支付、1待使用、2待评价、3已取消、4已退款、5已完成） */
    @Excel(name = "订单状态", readConverterExp = "0=待支付、1待使用、2待评价、3已取消、4已退款、5已完成")
    @Field(type = FieldType.Integer)
    private Integer status;

    /** 删除状态（0：未删除，1：已删除） */
    private Integer del;

    public void setId(Long id) 
    {
        this.id = id;
    }

    public Long getId() 
    {
        return id;
    }

    public void setVerificationCode(String verificationCode) 
    {
        this.verificationCode = verificationCode;
    }

    public String getVerificationCode() 
    {
        return verificationCode;
    }

    public void setVerificationImg(String verificationImg) 
    {
        this.verificationImg = verificationImg;
    }

    public String getVerificationImg() 
    {
        return verificationImg;
    }

    public void setMid(Long mid) 
    {
        this.mid = mid;
    }

    public Long getMid() 
    {
        return mid;
    }

    public void setUid(Long uid) 
    {
        this.uid = uid;
    }

    public Long getUid() 
    {
        return uid;
    }

    public void setServiceId(Long serviceId) 
    {
        this.serviceId = serviceId;
    }

    public Long getServiceId() 
    {
        return serviceId;
    }

    public void setServiceTypeId(Long serviceTypeId) 
    {
        this.serviceTypeId = serviceTypeId;
    }

    public Long getServiceTypeId() 
    {
        return serviceTypeId;
    }

    public void setOrderTime(Date orderTime) 
    {
        this.orderTime = orderTime;
    }

    public Date getOrderTime() 
    {
        return orderTime;
    }

    public void setReservationTime(Date reservationTime) 
    {
        this.reservationTime = reservationTime;
    }

    public Date getReservationTime() 
    {
        return reservationTime;
    }

    public void setCarId(Long carId) 
    {
        this.carId = carId;
    }

    public Long getCarId() 
    {
        return carId;
    }

    public void setPlatformCouponId(Long platformCouponId) 
    {
        this.platformCouponId = platformCouponId;
    }

    public Long getPlatformCouponId() 
    {
        return platformCouponId;
    }

    public void setShopCouponId(Long shopCouponId) 
    {
        this.shopCouponId = shopCouponId;
    }

    public Long getShopCouponId() 
    {
        return shopCouponId;
    }

    public void setPrice(Double price)
    {
        this.price = price;
    }

    public Double getPrice()
    {
        return price;
    }

    public void setPayTime(Date payTime) 
    {
        this.payTime = payTime;
    }

    public Date getPayTime() 
    {
        return payTime;
    }

    public void setPayType(Long payType) 
    {
        this.payType = payType;
    }

    public Long getPayType() 
    {
        return payType;
    }

    public void setUseTime(Date useTime) 
    {
        this.useTime = useTime;
    }

    public Date getUseTime() 
    {
        return useTime;
    }

    public void setStatus(Integer status) 
    {
        this.status = status;
    }

    public Integer getStatus() 
    {
        return status;
    }

    public void setDel(Integer del) 
    {
        this.del = del;
    }

    public Integer getDel() 
    {
        return del;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("verificationCode", getVerificationCode())
            .append("verificationImg", getVerificationImg())
            .append("mid", getMid())
            .append("uid", getUid())
            .append("serviceId", getServiceId())
            .append("serviceTypeId", getServiceTypeId())
            .append("orderTime", getOrderTime())
            .append("reservationTime", getReservationTime())
            .append("carId", getCarId())
            .append("platformCouponId", getPlatformCouponId())
            .append("shopCouponId", getShopCouponId())
            .append("price", getPrice())
            .append("payTime", getPayTime())
            .append("payType", getPayType())
            .append("useTime", getUseTime())
            .append("status", getStatus())
            .append("del", getDel())
            .toString();
    }


    /**
     * 多表联查
     */
    private Shop shop;
    private User user;
    private IdentityVerification identityVerification;
    private ServiceDetails serviceDetails;
    private ServiceType serviceType;
    private Coupon coupon;
}
